
#pragma once

#include <yaml-cpp/yaml.h>
#include <Eigen/Dense>

#include <pcl/point_types.h>
#include <pcl/point_cloud.h>

typedef pcl::PointXYZ PointType;
typedef pcl::PointCloud<PointType> CloudType;
typedef CloudType::Ptr CloudPtr;

namespace TESTICP
{
    class RegistrationInterface
    {
    public:
        virtual ~RegistrationInterface() = default;

        virtual void setInputTarget(const CloudPtr& target) = 0;
        virtual void setInputSource(const CloudPtr& input_source) = 0;
        virtual bool align(CloudType& output_ptr, const Eigen::Matrix4f& predict_pose = Eigen::Matrix4f::Identity()) = 0;
        virtual Eigen::Matrix4f getFinalTransformation() = 0;
        virtual float getFitnessScore() = 0;
    };
}

